[5 kyu]Simple digit code breaker

我偷了一个会说话的行李箱⌚️2016.03.15

怪兽的属性:

[5 kyu]Simple digit code breaker-问题描述
[5 kyu]Simple digit code breaker-问题描述
&
[5 kyu]Simple digit code breaker-解题区

怪兽的技能:

[5 kyu]Simple digit code breaker-验证方式

大木博士的图鉴:

你今天照常在火车站偷东西,这次的收获是一个行李箱。正打算依具《偷术大全》里面的建议,强行把她拆开。但却在拍干净手掌,蹲下身子,准备把她举到头上的时候,你突然听到有人在说话。

“喂”

环顾四周却又没有看到什么人。

“把我放下来!”

声音又响起来,你感觉声音是从上方传来的,不禁抬头看了看手上的行李箱。

你赶紧把箱子放了下了,这个过程中,箱子里还有隐约有“哎飒哟飒”的嘟囔。“里面难道有人?”你心里突然冒出这样一个奇怪而可怕的猜测,那么为什么有个人呢?

...具体情节请看《箱之少女》...

最后,你了解到,这个箱子的密码会在每十次尝试之后再自动随机生成一个新密码。

  1. 一开始他回返回个‘空(null)’给你,你得处理这个‘空(null)’,再返回给他一个由0~9三个正整数组成的数组。

  2. 这个数组将会和密码匹配后再返回一个数组(我们唤其为 差距数组)。差距数组表示输入数与密码数之间的差距:

    • 输入数 < 密码数 --> +1

    • 输入数 > 密码数 --> -1

    • 输入数 = 密码数 --> 0

  3. 10次尝试不成功之后,旧密码失效,新密码将重新生成。

快快想出办法来,拯救箱中的少女,然后做些♨️羞羞的事情吧!

战斗记录仪回放:

var guess = [5, 5, 5];①

function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            guess[i] += indications[i];
        }
    }
    return guess;②
}

?竹节:

  1. 这个应当可以放入 tryCode 方法中去,单独放置在外面,略微不合适。

  2. 实现单一出口。

  3. ✨两处都可以简化,因为 差距数组 的值,就是 猜测数组 要进行的调整。

var guess = [5, 5, 5];
function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            if (indications[i] == 1)✨
                ++guess[i];
            if (indications[i] == -1)✨
                --guess[i];
        }
    }
    return guess;
}
  1. 失误,‘=’ 和 ‘==’ 。

var guess = [5, 5, 5];
function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            if (indications[i] = 1)✨
                ++guess[i];
            if (indications[i] = -1)✨
                --guess[i];
        }
    }
    return guess;
}
  1. 一开始只把 差距数组 看成表达 大小关系。于是想着用 二分法 来进行调整,最后发现比较复杂,需要考虑的太多。

国际战场的经典录像

zarjay

var tryCode = (function() {
  var guess = [5, 5, 5];
  ②return function(indication) {
    guess = indication ?③ guess.map④(function(d, i) { return d + indication[i]; }):guess;
    return guess;
  }
})();①

?竹节:

  1. (function(){})(); ?

  2. function(){return funciton(){}}?

  3. ? & :?

    • 条件(三元目])运算符----[(condition)? expr1 : expr2

    • 是 JavaScript 仅有的使用三个操作数的运算符。本运算符经常作为 if 语句的简短形式来使用。

    • 如果条件值为真值(true),运算符就会返回 expr1 的值;否则, 就会返回 expr2 的值。

  4. map()?


adolfo7x, chunghanliou

var digits = [5, 5, 5];

function tryCode(indications) {
  if (!①indications){ 
    digits = [5, 5, 5];
    return digits;
  }
  
  return digits = digits.map(function(value, index){
    return value + indications[index];
  });
}

竹节:

  1. !?

    • !:逻辑非

      • !(expr)

        • 如果单个表达式能转换true 的话返回 false ,否则返回 true .

        • 能够转换为false的表达式有: null , 0 , ""undefined .

    • ∴ 原表达式 = if(indications == false)

  2. map()?

    • JQ的一个遍历方法。

    • 《串串香》中的 map 的笔记

    • 如果调用该方法的数据是数组A则 从数组A吃一个数,进行加工并把加工的结果吐出到一个新数组B中去,待吐完最后一个数后把数组B返回去。


MaximeDesRoches

function tryCode(indications) {
  if(indications == null) {
    tryCode.test = [5,5,5];①
    return tryCode.test;
  }
  return tryCode.test = tryCode.test.map(function(c, i){
    if (indications[i] === 0) return c;
    return (indications[i] === 1) ? ++c : --c;
  });
}

竹节:

  1. 为什么tryCode.test在运行结束之后没有被回收呢?


RDDcoding
146 声望16 粉丝

一心一行